package qc.module.platform.api.controller;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import qc.common.core.exception.QCPromptException;
import qc.module.platform.dto.db.DBDto;
import qc.module.platform.service.DbService;

import java.util.List;

/**
 * DbController
 *
 * @author QuCheng Tech
 * @since 2024/2/1
 */
@RestController
@RequestMapping("/db")
public class DbController {
    
    @Autowired
    private DbService service;

    /**
     * 获取所有
     * @return 返回数据库信息集合
     * @author QuCheng
     * @since 2024/3/12
     */
    @GetMapping("/all")
    public List<DBDto> getAll(){
        return service.getAll();
    }

    /**
     * 获取指定——支持RequestParam
     * @param id 数据库代码
     * @return 返回指定数据库信息
     * @author QuCheng
     * @since 2024/3/12
     */
    @GetMapping("get")
    public DBDto getByParam(@RequestParam String id) throws QCPromptException {
        return service.get(id);
    }

    /**
     * 获取指定——支持PathVariable
     * @param id 数据库代码
     * @return 返回指定数据库信息
     * @author QuCheng
     * @since 2024/3/12
     */
    @GetMapping("get/{id}")
    public DBDto getByPath(@PathVariable String id) throws QCPromptException {
        return service.get(id);
    }

    /**
     * 新增
     * @param dbDto
     * @return 成功返回null，失败返回错误信息
     * @author QuCheng
     * @since 2024/3/12
     */
    @RequestMapping(value = "/add", method = {RequestMethod.GET, RequestMethod.POST})
    public String add(@RequestBody DBDto dbDto){
        return service.add(dbDto);
    }

    /**
     * 修改
     * @param dbDto
     * @return 成功返回null，失败返回错误信息
     * @author QuCheng
     * @since 2024/3/12
     */
    @RequestMapping(value = "/update", method = {RequestMethod.POST, RequestMethod.PUT})
    public String update(@RequestBody DBDto dbDto){
        return service.update(dbDto);
    }

    /**
     * 删除——支持RequestParam，同时删除数据库表、数据库表sql和数据库表列中的信息。
     * @param id 数据库代码
     * @return 成功返回null，失败返回错误信息
     * @author QuCheng
     * @since 2024/3/12
     */
    @DeleteMapping("/delete")
    public String deleteByParam(@RequestParam String id) throws QCPromptException {
        return service.delete(id);
    }

    /**
     * 删除——支持PathVariable，同时删除数据库表、数据库表sql和数据库表列中的信息。
     * @param id 数据库代码
     * @return 成功返回null，失败返回错误信息
     * @author QuCheng
     * @since 2024/3/12
     */
    @DeleteMapping("/delete/{id}")
    public String deleteByPath(@PathVariable String id) throws QCPromptException {
        return service.delete(id);
    }
}
